"""
单例模式（Singleton Pattern）是最简单的设计模式之一。这种类型的设计模式属于创建型模式，它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类，该类负责创建自己的对象，同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式，可以直接访问，不需要实例化该类的对象。
单例模式是一种创建型设计模式，它确保一个类只有一个实例，并提供了一个全局访问点来访问该实例。
意图：
    确保一个类只有一个实例，并提供一个全局访问点来访问该实例。
适用性：
    频繁创建和销毁全局使用的类实例的问题。
结构：
    单例类：包含单例实例的类，通常将构造函数声明为私有。
    静态成员变量：用于存储单例实例的静态成员变量。
    获取实例方法：静态方法，用于获取单例实例。
    私有构造函数：防止外部直接实例化单例类。
    线程安全处理：确保在多线程环境下单例实例的创建是安全的。
"""
import threading


class Singleton:
    _instances = None

    def __new__(cls, *args, **kwargs):
        if not cls._instances:
            cls._instances = super().__new__(cls)
        return cls._instances


# 单例双重锁
class SingletonDoubleLock:
    _instances = None
    _lock = threading.Lock()

    def __new__(cls, *args, **kwargs):
        if not cls._instances:
            with cls._lock:
                if not cls._instances:
                    cls._instances = super().__new__(cls)
        return cls._instances


if __name__ == '__main__':
    instance1 = Singleton()
    instance2 = Singleton()
    print(instance1 is instance2)
